package com.winchain.provider.expiration.service.impl;

import com.shell.bee.acct.account.po.AcctBas;
import com.shell.bee.base.utils.SystemUtil;
import com.shell.bee.persistence.service.impl.PersistentServiceImpl;
import com.winchain.chainbill.bill.base.po.CbRec;
import com.winchain.provider.expiration.dao.CbDebitDtlDao;
import com.winchain.provider.expiration.po.CbDebit;
import com.winchain.provider.expiration.po.CbDebitDtl;
import com.winchain.provider.expiration.service.BillExpHldrService;
import com.winchain.provider.expiration.service.CbDebitDtlService;
import java.math.BigDecimal;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("cbDebitDtlService")
public class CbDebitDtlServiceImpl extends PersistentServiceImpl<CbDebitDtl> implements CbDebitDtlService {
	@Autowired
	private CbDebitDtlDao cbDebitDtlDao;
	@Autowired
	private BillExpHldrService billExpHldrService;

	public int updateSecurityBankAcct(String acctNo, String acctName, String cusId, String oldAcctNo) {
		return this.cbDebitDtlDao.updateSecurityBankAcct(acctNo, acctName, cusId, oldAcctNo);
	}

	public void saveDelayCbDebitDtl(CbDebit debit) {
		if (debit == null) {
			return;
		}
		String billId = debit.getBillId();

		String finId = this.billExpHldrService.getFinId(billId);
		AcctBas acct = this.billExpHldrService.getCashAcct(finId);

		saveCbDebitDtl(debit, debit.getBillAmount(), acct, "0");
	}

	private CbDebitDtl saveCbDebitDtl(CbDebit debit, BigDecimal amount, AcctBas acct, String debitTo) {
		if (amount.compareTo(new BigDecimal(0)) == 0) {
			return null;
		}
		CbDebitDtl detail = new CbDebitDtl();
		detail.setDtlId(SystemUtil.getUUID());
		detail.setDebitId(debit.getDebitId());
		detail.setDebitTo(debitTo);
		detail.setAmount(amount);
		detail.setAcctNo(acct.getAcctNo());
		detail.setAcctName(acct.getAcctNm());
		detail.setBankName(acct.getFiNm());
		save(detail);
		return detail;
	}

	public void saveCbDebitDtl(CbDebit debit, CbRec bill) {
		String focalCoId = bill.getConfirmerId();
		AcctBas acct = this.billExpHldrService.getCashAcct(focalCoId);

		saveCbDebitDtl(debit, bill.getBillAmt(), acct, "0");
	}

	public List<CbDebitDtl> selectByDebitId(String debitId) {
		CbDebitDtl dtl = new CbDebitDtl();
		dtl.setDebitId(debitId);
		return this.cbDebitDtlDao.select(dtl);
	}
}
